<script>
	import { getDeviceId } from './utils/device.js';
	import { getToken, setToken, getTokenExpireTime } from './utils/tokenManager.js';
	
	export default {
		onLaunch: function() {
			console.log('App Launch');
			// 启动时获取token，确保一致性
			getToken();
			
			// 检查token是否过期，尝试自动刷新
			this.checkAndRefreshToken();
		},
		onShow: function() {
			console.log('App Show');
		},
		onHide: function() {
			console.log('App Hide');
		},
		// 全局分享配置（分享到聊天）
		onShareAppMessage: function() {
			return {
				title: '绿茵裁判通',
				path: '/pages/index/index',
				imageUrl: '/static/logo.png',
				success: function(res) {
					uni.showToast({
						title: '分享成功',
						icon: 'success'
					});
				},
				fail: function(err) {
					console.error('分享失败', err);
				}
			};
		},
		// 全局分享到朋友圈
		onShareTimeline: function() {
			return {
				title: '绿茵裁判通',
				query: '',
				imageUrl: '/static/logo.png'
			};
		},
		methods: {
			// 检查并刷新token
			checkAndRefreshToken() {
				const token = getToken(); // 使用getToken确保token一致性
				if (!token) return; // 如果没有token，直接返回
				
				// 检查expire_time是否存在，如果即将过期，则刷新token
				const expireTime = getTokenExpireTime();
				const now = new Date().getTime();
				const oneHour = 60 * 60 * 1000; // 1小时毫秒数
				
				// 如果过期时间不存在或者距离过期不到1小时，尝试刷新token
				if (!expireTime || (now > expireTime - oneHour)) {
					console.log('Token即将过期，尝试刷新');
					
					// 调用刷新token云对象
					(async () => {
						try {
							const userService = uniCloud.importObject('user-service');
							const res = await userService.refreshToken(token);
							
							if (res && res.code === 0 && res.data) {
								console.log('Token自动刷新成功');
								// 使用tokenManager更新token
								setToken(res.data.token, res.data.expire_time);
							} else {
								console.warn('Token刷新失败:', res?.message || '未知错误');
							}
						} catch (err) {
							console.error('刷新token出错:', err);
						}
					})();
				}
			},
			
			// 检查用户登录状态
			checkLoginStatus() {
				// 从本地存储获取用户信息和token
				const userInfoStr = uni.getStorageSync('userInfo');
				const token = getToken();
				
				// 获取设备ID，如果已登录但没有设备ID，会生成一个新的
				const deviceId = getDeviceId();
				
				console.log('检查登录状态：', 
					userInfoStr ? '有用户信息' : '无用户信息', 
					token ? '有token' : '无token',
					'设备ID:', deviceId
				);
				
				if (!token || !userInfoStr) {
					// 如果token或用户信息任一不存在，清除所有登录状态
					if (token || userInfoStr) {
						// 如果只有token或只有用户信息，说明数据不一致，全部清除
						console.log('登录状态数据不一致，清除登录信息');
						uni.removeStorageSync('userInfo');
						// token已经由tokenManager统一管理，无需在此处移除
					} else {
						console.log('用户未登录');
					}
					return;
				}
				
				// 验证token有效性
				(async () => {
					try {
						const userService = uniCloud.importObject('user-service');
						const res = await userService.verifyToken(token);
						
						console.log('验证token结果:', res);
						
						if (res.code !== 0) {
							// token无效，清除本地存储
							uni.removeStorageSync('userInfo');
							console.log('token已失效，已清除登录信息');
						} else {
							// token有效，检查用户信息是否与token匹配
							try {
								const userInfo = JSON.parse(userInfoStr);
								console.log('用户已登录，用户信息:', userInfo);
							} catch (e) {
								console.error('解析用户信息失败，清除登录状态', e);
								uni.removeStorageSync('userInfo');
							}
						}
					} catch (err) {
						console.error('验证token失败', err);
					}
				})();
			},
			
			// 刷新token
			async refreshToken(token, userId, deviceId) {
				try {
					const userService = uniCloud.importObject('user-service');
					const res = await userService.refreshToken(token);
					
					if (res.code === 0) {
						console.log('Token刷新成功:', res);
						
						// 使用tokenManager更新token
						setToken(res.data.token, res.data.expire_time);
						
						// 更新userInfo中的token
						try {
							const userInfoStr = uni.getStorageSync('userInfo');
							if (userInfoStr) {
								const userInfo = JSON.parse(userInfoStr);
								userInfo.token = res.data.token;
								userInfo.expire_time = res.data.expire_time;
								uni.setStorageSync('userInfo', JSON.stringify(userInfo));
							}
						} catch (e) {
							console.error('更新用户信息失败', e);
						}
					} else {
						console.error('刷新token失败:', res.message);
					}
				} catch (err) {
					console.error('刷新token请求失败', err);
				}
			}
		}
	}
</script>

<style>
	/* 全局样式 */
	page {
		font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', Helvetica, Segoe UI, Arial, Roboto, 'PingFang SC', 'miui', 'Hiragino Sans GB', 'Microsoft Yahei', sans-serif;
		font-size: 28rpx;
		line-height: 1.5;
		color: #333333;
		background-color: #F8F8F8;
	}
	
	/* 通用样式 */
	.flex-row {
		display: flex;
		flex-direction: row;
	}
	
	.flex-column {
		display: flex;
		flex-direction: column;
	}
	
	.flex-center {
		display: flex;
		justify-content: center;
		align-items: center;
	}
	
	.flex-between {
		display: flex;
		justify-content: space-between;
		align-items: center;
	}
	
	.flex-around {
		display: flex;
		justify-content: space-around;
		align-items: center;
	}
	
	.flex-1 {
		flex: 1;
	}
	
	/* 主题颜色 */
	.primary-color {
		color: #1BAE76;
	}
	
	.primary-bg {
		background-color: #1BAE76;
	}
	
	.primary-border {
		border-color: #1BAE76;
	}
	
	/* 按钮样式 */
	.btn-primary {
		background-color: #1BAE76;
		color: #FFFFFF;
		border: none;
	}
	
	.btn-outline {
		background-color: transparent;
		color: #1BAE76;
		border: 1rpx solid #1BAE76;
	}
	
	/* 文本样式 */
	.text-primary {
		color: #1BAE76;
	}
	
	.text-secondary {
		color: #666666;
	}
	
	.text-light {
		color: #999999;
	}
	
	.text-danger {
		color: #FF5151;
	}
	
	.text-center {
		text-align: center;
	}
	
	.text-left {
		text-align: left;
	}
	
	.text-right {
		text-align: right;
	}
	
	.text-bold {
		font-weight: bold;
	}
	
	/* 边距样式 */
	.m-10 {
		margin: 10rpx;
	}
	
	.m-20 {
		margin: 20rpx;
	}
	
	.m-30 {
		margin: 30rpx;
	}
	
	.mt-10 {
		margin-top: 10rpx;
	}
	
	.mt-20 {
		margin-top: 20rpx;
	}
	
	.mt-30 {
		margin-top: 30rpx;
	}
	
	.mb-10 {
		margin-bottom: 10rpx;
	}
	
	.mb-20 {
		margin-bottom: 20rpx;
	}
	
	.mb-30 {
		margin-bottom: 30rpx;
	}
	
	.p-10 {
		padding: 10rpx;
	}
	
	.p-20 {
		padding: 20rpx;
	}
	
	.p-30 {
		padding: 30rpx;
	}
	
	/* 边框样式 */
	.border {
		border: 1rpx solid #EEEEEE;
	}
	
	.border-top {
		border-top: 1rpx solid #EEEEEE;
	}
	
	.border-bottom {
		border-bottom: 1rpx solid #EEEEEE;
	}
	
	.border-radius {
		border-radius: 10rpx;
	}
	
	.border-radius-circle {
		border-radius: 50%;
	}
	
	/* 阴影样式 */
	.shadow {
		box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.05);
	}
	
	.shadow-lg {
		box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.1);
	}
</style>

<template>
	<view>
		<!-- 页面内容 -->
	</view>
</template>
